#ifndef MESSAGEEDITAREA_H
#define MESSAGEEDITAREA_H

#include <QPlainTextEdit>
#include <QPushButton>
#include <QWidget>
#include "model/DataCenter.h"
#include <QLabel>

using namespace model;
class CustomTextEdit;
//////////////////////////////////////////////
/// 消息编辑区域
//////////////////////////////////////////////
class MessageEditArea : public QWidget
{
    Q_OBJECT
public:
    MessageEditArea();
    void init_ui();
    void init_signals_slots();
private:
    void send_message();
    void send_image_message();
    void send_file_message();
    void handle_pressed_speech_btn();
    void handle_released_speech_btn();
    void send_speech_message(const QString& audio_path);
    void text_edit_changed();
    void push_back_message(MessageType type, const QByteArray& content, const QString& extra_info);
    void push_back_message_other(const Message& message);
private:
    CustomTextEdit*    text_edit;        // 消息编辑区域
    QPushButton*       send_btn;         // 发送按钮
    QPushButton*       send_image_btn;   // 发送图片按钮
    QPushButton*       send_speech_btn;  // 发送语音按钮
    QPushButton*       send_file_btn;    // 发送文件按钮
    QPushButton*       get_history_btn;  // 获取历史消息按钮
    QLabel*            recording_label;  // 录音时的提示标签
    model::DataCenter* data_center;      // 数据中心, 存放所有数据
};


////////////////////////////////////////////////////
/// 自定义文本输入款 shift+enter换行, enter发送信号
////////////////////////////////////////////////////
class CustomTextEdit : public QPlainTextEdit
{
    Q_OBJECT
public:
    explicit CustomTextEdit(QWidget* parent = nullptr)
        : QPlainTextEdit(parent)
    {
    }
signals:
    void enter_pressed();  // 按下Enter键的信号
protected:
    void keyPressEvent(QKeyEvent* event) override;
};

#endif  // MESSAGEEDITAREA_H
